feat(vscode): add .NET 10 support for custom code projects#8895
feat(vscode): add .NET 10 support for custom code projects#8895ccastrotrejo merged 13 commits intomainfrom
Conversation
📊 Coverage CheckThe following changed files need attention:
Please add tests for the uncovered files before merging. |
There was a problem hiding this comment.
Pull request overview
Adds .NET 10 as a supported target framework for Logic Apps custom code projects in the VS Code extension (creation templates, detection, and debugging), alongside existing .NET 8 and .NET Framework support.
Changes:
- Introduces
.NET 10framework option in both extension quick-pick flows and the VS Code React webview UI (incl. new localized strings). - Adds new .NET 10 custom code project templates and updates template/framework mappings & detection logic.
- Updates debug/runtime handling and dotnet version detection to prioritize .NET 10.
Reviewed changes
Copilot reviewed 24 out of 27 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| libs/vscode-extension/src/lib/models/workflow.ts | Adds TargetFramework.Net10 constant for shared model usage. |
| apps/vs-code-react/src/intl/messages.ts | Adds .NET 10 UI strings for framework selection + description. |
| apps/vs-code-react/src/app/createWorkspace/steps/reviewCreateStep.tsx | Refactors path building and maps framework display values to localized strings (incl. net10). |
| apps/vs-code-react/src/app/createWorkspace/steps/dotNetFrameworkStep.tsx | Adds .NET 10 option to the framework dropdown and consolidates option rendering. |
| apps/vs-code-react/src/app/createWorkspace/steps/test/reviewCreateStep.test.tsx | Adds unit test coverage for net10 display in review step. |
| apps/vs-code-designer/src/constants.ts | Adds DotnetVersion.net10 = 'net10.0'. |
| apps/vs-code-designer/src/assets/backupTemplates/dotnet/~4/net10.0/project.nupkg | Adds net10.0 backup template package for fallback scenarios. |
| apps/vs-code-designer/src/assets/FunctionProjectTemplate/FunctionsProjNet10New | New .NET 10 custom code project template. |
| apps/vs-code-designer/src/assets/FunctionProjectTemplate/FunctionsFileNet10 | New .NET 10 function file template. |
| apps/vs-code-designer/src/app/utils/dotnet/executeDotnetTemplateCommand.ts | Updates dotnet version detection priority and refactors command execution logic. |
| apps/vs-code-designer/src/app/utils/dotnet/dotnet.ts | Defaults Functions v4 template key to net10.0. |
| apps/vs-code-designer/src/app/utils/dotnet/test/executeDotnetTemplateCommand.test.ts | Updates tests for new .NET 10 version priority behavior. |
| apps/vs-code-designer/src/app/utils/debug.ts | Adds getCustomCodeRuntime() helper and uses it in debug config creation. |
| apps/vs-code-designer/src/app/utils/customCodeUtils.ts | Centralizes target framework detection (net10/net8/netfx) and updates metadata extraction logic. |
| apps/vs-code-designer/src/app/utils/codeless/updateBuildFile.ts | Updates Microsoft.NET.Sdk.Functions version mapping for net10 (and currently affects net6 behavior). |
| apps/vs-code-designer/src/app/utils/test/debug.test.ts | Adds debug config unit test for net10 custom code. |
| apps/vs-code-designer/src/app/utils/test/customCodeUtils.test.ts | Adds net10 custom code detection/metadata tests based on the new template. |
| apps/vs-code-designer/src/app/commands/createWorkflow/createCodefulWorkflow/createCodefulWorkflowSteps/codefulWorkflowCreateStep.ts | Switches codeful workflow creation default from .NET 8 to .NET 10. |
| apps/vs-code-designer/src/app/commands/createProject/createCustomCodeProjectSteps/targetFrameworkStep.ts | Adds .NET 10 to framework quick pick. |
| apps/vs-code-designer/src/app/commands/createProject/createCustomCodeProjectSteps/functionAppFilesStep.ts | Adds net10 template mappings + uses shared runtime helper. |
| apps/vs-code-designer/src/app/commands/createNewCodeProject/CodeProjectBase/test/CreateLogicAppVSCodeContents.test.ts | Adds net10 tests for settings/launch generation. |
| apps/vs-code-designer/src/app/commands/createNewCodeProject/CodeProjectBase/test/CreateLogicAppProject.test.ts | Updates integration tests to include net10 templates/mappings. |
| apps/vs-code-designer/src/app/commands/createNewCodeProject/CodeProjectBase/CreateLogicAppVSCodeContents.ts | Refactors settings/launch insertion logic and uses shared runtime helper. |
| apps/vs-code-designer/src/app/commands/createNewCodeProject/CodeProjectBase/CreateFunctionAppFiles.ts | Adds net10 templates and shared runtime helper usage. |
| apps/vs-code-designer/src/app/commands/createCustomCodeFunction/createCustomCodeFunctionSteps/functionFileStep.ts | Adds net10 function template selection. |
| Localize/lang/strings.json | Adds .NET 10 strings and other related UI text entries. |
apps/vs-code-designer/src/app/utils/dotnet/executeDotnetTemplateCommand.ts
Show resolved
Hide resolved
...signer/src/app/commands/createNewCodeProject/CodeProjectBase/CreateLogicAppVSCodeContents.ts
Show resolved
Hide resolved
cc7b6b6 to
8cada8b
Compare
🤖 AI PR Validation ReportPR Review ResultsThank you for your submission! Here's detailed feedback on your PR title and body compliance:✅ PR Title
✅ Commit Type
✅ Risk Level
✅ What & Why
✅ Impact of Change
✅ Test Plan
|
| Section | Status | Recommendation |
|---|---|---|
| Title | ✅ | Keep as-is. |
| Commit Type | ✅ | No change. |
| Risk Level | ✅ | Risk label matches PR body (Medium). |
| What & Why | ✅ | Well described. |
| Impact of Change | ✅ | Consider adding explicit migration/release-note guidance if applicable. |
| Test Plan | ✅ | Unit tests present. If E2E coverage is required later, add a note. |
| Contributors | Add contributors/co-authors to the PR body for attribution. | |
| Screenshots/Videos | No visual changes — N/A is fine. |
Final notes / actionable items:
- The PR overall meets the required PR body template and is comprehensive. It passes the PR title/body checks.
- A few optional clarifications you may choose to add to the PR body before merging:
- Contributors: add the author and co-authors (e.g.,
@ccastrotrejoand other contributors shown in commits) into the Contributors section to make attribution explicit. - Tests: you added many unit tests — if there are plans for E2E or integration tests (especially around dotnet detection, global.json creation, and template behavior on CI agents), add a short note in Test Plan describing next steps. If you intentionally skipped E2E because of environmental constraints, add a short justification.
- Impact/Migration: because default behavior in some flows was changed to prefer .NET 10 (for example, switchToDotnetProject default major version changed to '10' and codeful workflows now pick net10), consider adding a brief migration/release note for consumers who may rely on older defaults. If any pipelines or docs should be updated, call that out.
- Contributors: add the author and co-authors (e.g.,
- Security/operational check: mapping net10.0 to the net8.0 dotnetJsonCli assets is explained in the PR; ensure CI and release packaging confirm the copied/renamed assets are correct and that no runtime assumptions were missed.
Please update the PR body with the optional clarifications above if helpful, then re-submit. Thank you for the thorough PR and tests — this is a strong change set.
Last updated: Wed, 11 Mar 2026 19:36:02 GMT
Add .NET 10 as a selectable target framework across the VS Code extension and webview for custom code project creation, detection, and debugging. - Add TargetFramework.Net10 enum value and DotnetVersion.net10 constant - Create FunctionsFileNet10 and FunctionsProjNet10New template files - Add net10.0 backup templates for dotnet template fallback - Expose .NET 10 in extension quick-pick and webview dropdown selectors - Add DOTNET_10 and DOTNET_10_DESCRIPTION localization strings - Wire Net10 into template mappings in functionAppFilesStep and CreateFunctionAppFiles with shared usesPublishFolderProperty helper - Extract getCustomCodeRuntime helper for coreclr/clr runtime selection - Add isCustomCodeNet10Csproj detection and getCustomCodeTargetFramework dispatcher in customCodeUtils with usesLogicAppFolderToPublish helper - Reprioritize .NET version detection to prefer 10 over 8 - Update codeful workflow creation to default to .NET 10 - Add DotnetVersion.net10 to SDK version mapping in updateBuildFile - Add unit tests for debug config, custom code detection, VSCode contents generation, framework version probing, and review step rendering Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Restore original .NET 8 test cases in executeDotnetTemplateCommand tests that were incorrectly replaced instead of supplemented with .NET 10 cases - Add .NET 10 binaries test case alongside existing .NET 8 one - Fix runtime import for ProjectType/ProjectLanguage/latestGAVersion in CreateLogicAppVSCodeContents.ts (was incorrectly collapsed to type-only) - Restore .NET 6 SDK version mapping to 4.1.3 in updateBuildFile.ts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
8cada8b to
9217dac
Compare
- Copy dotnetJsonCli/net8.0 to dotnetJsonCli/net10.0 so template operations work when getFramework returns net10.0 - Restore value imports for ProjectType, ProjectLanguage, latestGAVersion in CreateLogicAppVSCodeContents.ts (biome useImportType kept collapsing them to type-only imports which breaks runtime) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…icating assets Remove the duplicated dotnetJsonCli/net10.0 folder and add a getJsonCliFramework() mapper that falls back to net8.0 for unsupported frameworks. The JsonCli DLLs are framework-agnostic and forward-compatible, so net10.0 can reuse net8.0 binaries. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 25 out of 27 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (1)
apps/vs-code-designer/src/app/utils/debug.ts:29
- The doc comment for
customCodeTargetFrameworkstill says it's limited to ".NET 8 or .NET Framework", but the implementation now supports .NET 10 as well. Please update the comment to reflect the expanded set of supported frameworks.
/**
* Generates a debug configuration for a Logic App based on the function version and optional custom code framework.
* @param version - The Azure Functions runtime version (v1, v2, v3, or v4)
* @param logicAppName - The name of the Logic App to debug
* @param customCodeTargetFramework - Optional target framework for custom code (.NET 8 or .NET Framework)
*
apps/vs-code-designer/src/app/commands/workflows/switchToDotnetProject.ts
Show resolved
Hide resolved
...designer/src/app/commands/createProject/createCustomCodeProjectSteps/functionAppFilesStep.ts
Outdated
Show resolved
Hide resolved
...ode-designer/src/app/commands/createNewCodeProject/CodeProjectBase/CreateFunctionAppFiles.ts
Outdated
Show resolved
Hide resolved
- Add explicit getCustomCodeRuntime tests for Net8, Net10, and NetFx - Add updateFunctionsSDKVersion tests for .NET 8 (4.5.0) and .NET 10 (4.5.0) - Export getJsonCliFramework and add tests for framework-to-asset mapping including net10.0 → net8.0 fallback behavior Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…l SDK version - Extract usesPublishFolderProperty into shared debug.ts utility, removing duplicated private methods from CreateFunctionAppFiles and FunctionAppFilesStep - Guard against null getLocalDotNetVersionFromBinaries result in switchToDotnetProject to prevent writing invalid global.json; log a warning when SDK version cannot be determined - Add unit tests for usesPublishFolderProperty covering all project types and target frameworks Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add unit tests for the NET10 branch changes in files that had 0% coverage: - functionFileStep: Net10 template mapping - functionAppFilesStep: Net10 cs/csproj template mappings - targetFrameworkStep: Net10 picker option and shouldPrompt logic - dotnet.ts: FuncVersion.v4 defaults to net10.0 - dotNetFrameworkStep: Net10 dropdown rendering, selection dispatch Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…trotrejo/NET10
…trotrejo/NET10
- Update FunctionsProjNet10 with correct .NET 10 packages and build targets - Change TFM from net10 to net10.0 across codebase - Rename FunctionsProjNet8New → FunctionsProjNet8 - Rename FunctionsProjNet10New → FunctionsProjNet10 - Delete unused legacy FunctionsProjNet8 template - Update TargetFramework.Net10 enum to 'net10.0' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…odel - Create ProgramFileNet10 template with namespace placeholder - Update CreateFunctionAppFiles and FunctionAppFilesStep to generate Program.cs for .NET 10 custom code projects - Add 8 tests covering Program.cs creation, namespace replacement, and skipping for Net8/NetFx/rulesEngine projects Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Extract duplicated template maps and file-creation methods into shared functionProjectFiles.ts utility module - Replace hardcoded framework strings with TargetFramework constants in dotNetFrameworkStep and reviewCreateStep - Remove brittle (step as any) casts in tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
apps/vs-code-designer/src/app/utils/dotnet/executeDotnetTemplateCommand.ts
Outdated
Show resolved
Hide resolved
…ework
Version sources were concatenated with no delimiter, causing the
multiline regex to miss versions when outputs lacked trailing newlines.
For example, '8.0.100' + '10.0.200 [/sdk]' became '8.0.10010.0.200'
which matched neither version.
Using join('\n') ensures each source starts on its own line so the
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
| path.join(assetsFolderName, 'dotnetJsonCli', jsonCliFramework, 'Microsoft.TemplateEngine.JsonCli.dll') | ||
| ); | ||
|
|
||
| return await executeCommand( |
There was a problem hiding this comment.
why is the await removed from here?
Commit Type
Risk Level
What & Why
Adds full .NET 10 support for custom code projects in the VS Code extension. .NET 10 uses the isolated worker model, which requires different project templates, updated packages, and a
Program.csentry point — unlike .NET 8 which used a lighter in-process-compatible approach.Key Changes
Template Updates
FunctionsProjNet10with correct .NET 10 isolated worker packages (Microsoft.Azure.Functions.Workerv2.51.0,AspNetCore,ApplicationInsights,Workflows.Webjobs.Sdkv1.4.0)EnsureOutputDirectory,CopyToNet472Folder,TriggerPublishOnBuild)ProgramFileNet10template for the requiredProgram.cshost entry pointFunctionsProjNet8New→FunctionsProjNet8andFunctionsProjNet10New→FunctionsProjNet10(cleanup)FunctionsProjNet8templateTFM Update
TargetFramework.Net10fromnet10tonet10.0(correct .NET TFM format)Scaffolding
CreateFunctionAppFiles.tsandFunctionAppFilesStep.tsto generateProgram.csfor .NET 10 custom code projects (not for .NET 8, NetFx, or rulesEngine)HostBuilderwithConfigureFunctionsWebApplication()and Application Insights telemetryPrior commits on this branch
TargetFrameworkenum and project creation flowsnet10.0dotnetJsonCli tonet8.0binaries (forward-compatible)usesPublishFolderPropertyutilityImpact of Change
TargetFramework.Net10enum value changed fromnet10tonet10.0— any downstream consumers should be awareProgram.csgeneration for .NET 10 only; .NET 8 and NetFx paths unchangedTest Plan
Contributors
Screenshots/Videos